#pragma once

#include <boost/signal.hpp>
#include <boost/function.hpp>
#include <vector>
#include <queue>

#include "../domain/models/CardsCollection.h"
#include "../domain/models/Player.h"
#include "../views/abstract/IBoardView.h"

namespace Controllers {

	class Controller
	{
	protected:
		Controller();
		std::vector<boost::signals::connection> connections;

	public:
		~Controller();

		template<typename T>
		boost::signals::connection connectEvent(boost::signal<T>& signal, boost::function<T> slot)
		{
			boost::signals::connection connection = signal.connect(slot);
			connections.push_back(connection);
			return connection;
		}

	};

}

